package main

/**
自定义排序
 */

 import (
	"fmt"
	"sort"
)

type byLength []string
//We implement sort.Interface - Len, Less, and Swap - on our type so we can use the sort package’s generic Sort function.
// Len and Swap will usually be similar across types and Less will hold the actual custom sorting logic.
// In our case we want to sort in order of increasing string length, so we use len(s[i]) and len(s[j]) here.

func (s byLength) Len() int {
	return len(s)
}
func (s byLength) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}
func (s byLength) Less(i, j int) bool {
	return len(s[i]) < len(s[j])
}
//With all of this in place, we can now implement our custom sort by casting the original fruits slice to byLength,
// and then use sort.Sort on that typed slice.

func main() {
	fruits := []string{"peach", "banana", "kiwi"}
	sort.Sort(byLength(fruits))
	fmt.Println(fruits)
}
